const express = require('express');
const router = express.Router();

// 存储验证码的临时对象（生产环境应使用Redis等）
const smsCodeStore = new Map();

// 生成6位数验证码
function generateSmsCode() {
    return Math.floor(100000 + Math.random() * 900000).toString();
}

// 发送短信验证码
router.post('/send-sms', async (req, res) => {
    try {
        const { phone } = req.body;
        
        // 验证手机号格式
        if (!phone || !/^1[3-9]\d{9}$/.test(phone)) {
            return res.status(400).json({
                success: false,
                message: '请输入正确的手机号码'
            });
        }
        
        // 检查发送频率限制（1分钟内只能发送一次）
        const lastSendTime = smsCodeStore.get(`time_${phone}`);
        if (lastSendTime && Date.now() - lastSendTime < 60000) {
            return res.status(400).json({
                success: false,
                message: '验证码发送过于频繁，请稍后再试'
            });
        }
        
        // 生成验证码
        const code = generateSmsCode();
        
        // 存储验证码和发送时间（5分钟有效期）
        smsCodeStore.set(`code_${phone}`, code);
        smsCodeStore.set(`time_${phone}`, Date.now());
        
        // 设置过期时间（5分钟后自动删除）
        setTimeout(() => {
            smsCodeStore.delete(`code_${phone}`);
        }, 5 * 60 * 1000);
        
        // 在实际项目中，这里应该调用短信服务商的API发送短信
        // 为了演示，我们只是在控制台输出验证码
        console.log(`📱 发送短信验证码到 ${phone}: ${code}`);
        
        res.json({
            success: true,
            message: '验证码发送成功',
            // 在开发环境中返回验证码，生产环境中不应返回
            ...(process.env.NODE_ENV === 'development' && { code })
        });
        
    } catch (error) {
        console.error('发送短信验证码失败:', error);
        res.status(500).json({
            success: false,
            message: '服务器错误，请稍后重试'
        });
    }
});

// 验证短信验证码
router.post('/verify-sms', async (req, res) => {
    try {
        const { phone, code } = req.body;
        
        if (!phone || !code) {
            return res.status(400).json({
                success: false,
                message: '手机号和验证码不能为空'
            });
        }
        
        const storedCode = smsCodeStore.get(`code_${phone}`);
        
        if (!storedCode) {
            return res.status(400).json({
                success: false,
                message: '验证码已过期或不存在'
            });
        }
        
        if (storedCode !== code) {
            return res.status(400).json({
                success: false,
                message: '验证码错误'
            });
        }
        
        // 验证成功后删除验证码
        smsCodeStore.delete(`code_${phone}`);
        smsCodeStore.delete(`time_${phone}`);
        
        res.json({
            success: true,
            message: '验证码验证成功'
        });
        
    } catch (error) {
        console.error('验证短信验证码失败:', error);
        res.status(500).json({
            success: false,
            message: '服务器错误，请稍后重试'
        });
    }
});

module.exports = router; 